import VXETable from 'vxe-table'
import XEUtils from 'xe-utils'
import formmatter from '@/libs/framework/formatter'

// 自定义全局的格式化处理函数
VXETable.formats.mixin({
  // 格式化性别
  formatSex({
    cellValue
  }) {
    return (cellValue === '' || cellValue === null || cellValue === undefined) ? '' : (cellValue === '1' ? '男' : '女')
  },
  // 格式化是否
  formatYesno({
    cellValue
  }) {
    return (cellValue === '' || cellValue === null || cellValue === undefined) ? '' : (cellValue ? '是' : '否')
  },
  // 格式化启用禁用
  formatEnabledisable({
    cellValue
  }) {
    return (cellValue === '' || cellValue === null || cellValue === undefined) ? '' : (cellValue ? '启用' : '禁用')
  },
  // 格式化下拉选项
  formatSelect({
    cellValue
  }, list) {
    const item = list.find(item => item.value === cellValue)
    return item ? item.key : ''
  },
  // 格式化字典下拉选项
  formatDictSelectByCode({
    cellValue
  }, list) {
    const item = list.find(item => item.code === cellValue)
    return item ? item.name : ''
  },
  // 格式化日期，默认 yyyy-MM-dd HH:mm:ss
  formatDate({
    cellValue
  }, format) {
    return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss')
  },
  // 四舍五入金额，每隔3位逗号分隔，默认2位数
  formatAmount({
    cellValue
  }, digits = 2) {
    return XEUtils.commafy(XEUtils.toNumber(cellValue), {
      digits
    })
  },
  // 格式化银行卡，默认每4位空格隔开
  formatBankcard({
    cellValue
  }) {
    return XEUtils.commafy(XEUtils.toString(cellValue), {
      spaceNumber: 4,
      separator: ' '
    })
  },
  // 四舍五入,默认两位数
  formatFixedNumber({
    cellValue
  }, digits = 2) {
    return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits)
  },
  // 向下舍入,默认两位数
  formatCutNumber({
    cellValue
  }, digits = 2) {
    return XEUtils.toFixed(XEUtils.floor(cellValue, digits), digits)
  },
  // 转换 moment 类型为字符串
  toMomentString({
    cellValue
  }, format) {
    return cellValue ? cellValue.format(format) : ''
  },
  // 格式化文件大小显示
  formatFileSize({ cellValue }) {
    return formmatter.formatFileSize(cellValue)
  },
  // 格式化json选项
  formatJson({
    cellValue
  }, jsonObj) {
    return jsonObj ? (jsonObj[cellValue] ?? cellValue) : cellValue;
  }
})
